package com.example.demo.common.com.example.demo;

import java.util.ArrayList;
import java.util.Iterator;

public class fx_demo02 {


    //定义一个Person类
    static class Person
    {
        private String name;
        public Person(String name){
            this.name = name;
        }
        public String getNmae(){
            return this.name;
        }
    }
    // 定义一个Student 并继承 Person
    static class Student extends Person
    {
        Student(String name){
            super(name);
        }
    }


    public static void main(String[] args) {

        ArrayList<Person> a1 = new ArrayList<Person>();
        a1.add(new Person("abc1"));
        a1.add(new Person("abc2"));
        a1.add(new Person("abc3"));

        printMethod(a1);


        // 下面是错误的。a2存的是Person，存在继承的话，也能放worker。但是等号右边只能存Student，存不进worker.类型安全问题。左右两边要一致
        ArrayList<Student> a2 = new ArrayList<Student>();
        a2.add(new Student("abc--1"));
        a2.add(new Student("abc--2"));
        a2.add(new Student("abc--3"));
        printMethod(a2); // ArrayList<Person> a2 = new ArrayList<Student>();
        //如果我想调用也printMethod(a2);没毛病。怎么做？。 第一想法直接给占位符。但是带来一问题，不能调用具体方法。
    }

    // 与main方法同级的静态工具类方法
    public static void printMethod(ArrayList<? extends Person> a1){
        Iterator<? extends Person> it = a1.iterator();
        while(it.hasNext()){
            System.out.println(it.next().getNmae());
        }
    }



}
